/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package arbol_sintactico_abstracto;

import analizadorlexico.Token;
import java.io.IOException;
import tabla_de_simbolos.Clase;
import tabla_de_simbolos.Constructor;
import tabla_de_simbolos.ErrorSemantico;
import tabla_de_simbolos.TablaDeSimbolos;
import tabla_de_simbolos.Tipo;
import generador_de_codigo.GeneradorDeCodigo;
/**
 *
 * @author Javi
 */
public class If extends Sentencia{
    private Expresion exp;
    private Sentencia sent;
    private Else elseif;

    public If(Token token, Expresion exp, Sentencia sent, Else elseif) {
        this.token = token;
        this.exp = exp;
        this.sent = sent;
        this.elseif = elseif;
    }

    
    @Override
    public Tipo check(Clase clase, Constructor metodo, TablaDeSimbolos ts) throws ErrorSemantico, IOException {
        Tipo t_exp = exp.check(clase, metodo,ts);
        String etiqueta1 = GeneradorDeCodigo.generarEtiqueta("else");
        String etiqueta2 = GeneradorDeCodigo.generarEtiqueta("finif");
        GeneradorDeCodigo.generar("BF " + etiqueta1 +"\n");
        if(!t_exp.getNombre().equals("boolean"))
            throw new ErrorSemantico("Sentencia if, se esperaba expresion booleana en la linea "+ token.getLinea());        
        sent.check(clase, metodo,ts);
        GeneradorDeCodigo.generar("JUMP " + etiqueta2 + "\n");
        GeneradorDeCodigo.generar(etiqueta1+": NOP \n");
        if(elseif != null){
            elseif.check(clase,metodo,ts);
        }
        GeneradorDeCodigo.generar(etiqueta2+": NOP \n");
        return null;
    }
}
